package com.chey.listener;

import com.chey.config.SubRunnerContext;
import com.chey.pojo.afid.MSG3;
import com.chey.pojo.airl.MSG4;
import com.chey.pojo.arre.MSG5;
import com.chey.pojo.blls.MSG6;
import com.chey.pojo.bore.MSG7;
import com.chey.pojo.cane.MSG8;
import com.chey.pojo.cfce.MSG9;
import com.chey.pojo.cfue.MSG2;
import com.chey.pojo.ckie.MSG10;
import com.chey.pojo.ckls.MSG11;
import com.chey.pojo.ckoe.MSG12;
import com.chey.pojo.depe.MSG13;
import com.chey.pojo.dfie.MSG24;
import com.chey.pojo.dlye.MSG14;
import com.chey.pojo.fett.MSG15;
import com.chey.pojo.file.EventType;
import com.chey.pojo.dfdl.MSG23;
import com.chey.pojo.fptt.MSG16;
import com.chey.pojo.frtt.MSG17;
import com.chey.pojo.gtls.MSG18;
import com.chey.pojo.lbde.MSG19;
import com.chey.pojo.onre.MSG20;
import com.chey.pojo.poke.MSG21;
import com.chey.pojo.stls.MSG22;
import com.chey.service.*;
import com.chey.pojo.apot.Msg1;
import com.chey.utils.XmlUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * @author JanYao
 * @version 0.1
 */
@Slf4j
@Component
public class FileListener  implements FileAlterationListener {

    public static ObjectMapper xmlMapper = new XmlMapper();
    String directory = null;

    @Override
    public void onStart(FileAlterationObserver fileAlterationObserver) {
        log.info("文件监听开始.....");
    }

    @Override
    public void onDirectoryCreate(File file) {

        System.out.println("文件夹创建");
        String directory = file.getName();
        System.out.println(directory);
        XmlUtils.directory = directory;
    }

    @Override
    public void onDirectoryChange(File file) {
        System.out.println("文件夹修改");
    }

    @Override
    public void onDirectoryDelete(File file) {
        System.out.println("文件夹删除");
    }

    //文件创建
    @Override
    public void onFileCreate(File file) {
        String TypeName = file.getName().substring(0, 9);
        System.out.println(TypeName);
        switch (TypeName) {
            case EventType.APUE:
                CreApot(file);
                break;
            case EventType.DFDL:
                CreDfdl(file);
                break;
            case EventType.CKLS:
                CreCkls(file);
                break;
            case EventType.DFIE:
                CreDfie(file);
                break;
            case EventType.STLS:
                CreStls(file);
                break;
            case EventType.POKE:
                CrePoke(file);
                break;
            case EventType.ONRE:
                CreOnre(file);
                break;
            case EventType.LBDE:
                CreLbde(file);
                break;
            case EventType.GTLS:
                CreGtls(file);
                break;
            case EventType.FRTT:
                CreFrtt(file);
                break;
            case EventType.FPTT:
                CreFptt(file);
                break;
            case EventType.FETT:
                CreFett(file);
                break;
            case EventType.DLYE:
                CreDlye(file);
                break;
            case EventType.DEPE:
                CreDepe(file);
                break;

            case EventType.CFUE:
                CreCfue(file);
                break;
            case EventType.AFID:
                CreAfid(file);
                break;
            case EventType.AIRL:
                CreAirl(file);
                break;
            case EventType.ARRE:
                CreArre(file);
                break;
            case EventType.BLLS:
                CreBlls(file);
                break;
            case EventType.BORE:
                CreBore(file);
                break;
            case EventType.CANE:
                CreCane(file);
                break;
            case EventType.CFCE:
                CreCfce(file);
                break;
            case EventType.CKIE:
                CreCkie(file);
                break;
            case EventType.CKOE:
                CreCkoe(file);
                break;
            default:
                System.out.println("文件类型错误");
                break;
        }

    }



    @Override
    public void onFileChange(File file) {
        System.out.println("文件修改");
    }

    @Override
    public void onFileDelete(File file) {
        System.out.println("文件删除");
    }

    @Override
    public void onStop(FileAlterationObserver fileAlterationObserver) {
        log.info("文件监听结束....");
    }


    public void CreApot(File file) {

        Msg1 msg = XmlUtils.getMsg(file, Msg1.class);
        SubRunnerContext.getBean(ApueService.class).insert(msg.getMeta(), msg.getData());
    }

    public void CreDfdl(File file) {

        MSG23 data = XmlUtils.getMsg(file, MSG23.class);
        System.out.println(data);
        SubRunnerContext.getBean(DfdlService.class).insert(data);
    }


    public void CreCkls(File file) {

        MSG11 msg = XmlUtils.getMsg(file, MSG11.class);
        SubRunnerContext.getBean(CklsService.class).insert(msg);
    }


    public void CreDfie(File file) {

        MSG24 msg = XmlUtils.getMsg(file, MSG24.class);
        SubRunnerContext.getBean(DfieService.class).insert(msg);
    }


    public void CreStls(File file) {

        MSG22 msg = XmlUtils.getMsg(file, MSG22.class);
        SubRunnerContext.getBean(StlsService.class).insert(msg);
    }

    public void CrePoke(File file) {

        MSG21 msg = XmlUtils.getMsg(file, MSG21.class);
        SubRunnerContext.getBean(PokeService.class).insert(msg);

    }

    public void CreOnre(File file) {

        MSG20 msg = XmlUtils.getMsg(file, MSG20.class);
        SubRunnerContext.getBean(OnreService.class).insert(msg);

    }

    public void CreLbde(File file) {

        MSG19 msg = XmlUtils.getMsg(file, MSG19.class);
        SubRunnerContext.getBean(LbdeService.class).insert(msg);

    }

    public void CreGtls(File file) {

        MSG18 msg = XmlUtils.getMsg(file, MSG18.class);
        SubRunnerContext.getBean(GtlsService.class).insert(msg);

    }

    public void CreFrtt(File file) {

        MSG17 msg = XmlUtils.getMsg(file, MSG17.class);
        SubRunnerContext.getBean(FrttService.class).insert(msg);

    }

    public void CreFptt(File file) {

        MSG16 msg = XmlUtils.getMsg(file, MSG16.class);
        SubRunnerContext.getBean(FpttService.class).insert(msg);

    }

    public void CreFett(File file) {

        MSG15 msg = XmlUtils.getMsg(file, MSG15.class);
        SubRunnerContext.getBean(FettService.class).insert(msg);

    }

    public void CreDlye(File file) {

        MSG14 msg = XmlUtils.getMsg(file, MSG14.class);
        SubRunnerContext.getBean(DlyeService.class).insert(msg);

    }

    public void CreDepe(File file) {

        MSG13 msg = XmlUtils.getMsg(file, MSG13.class);
        SubRunnerContext.getBean(DepeService.class).insert(msg);

    }

    public void CreAfid(File file) {

        MSG3 msg = XmlUtils.getMsg(file, MSG3.class);
        SubRunnerContext.getBean(AfidService.class).insert(msg);

    }

    public void CreAirl(File file) {

        MSG4 msg = XmlUtils.getMsg(file, MSG4.class);
        System.out.println(msg);
        SubRunnerContext.getBean(AirlService.class).insert(msg);

    }
    public void CreArre(File file) {

        MSG5 msg = XmlUtils.getMsg(file, MSG5.class);
        System.out.println(msg);
        SubRunnerContext.getBean(ArreService.class).insert(msg);

    }

    public void CreBlls(File file) {

        MSG6 msg = XmlUtils.getMsg(file, MSG6.class);
        System.out.println(msg);
        SubRunnerContext.getBean(BllsService.class).insert(msg);

    }

    public void CreBore(File file) {

        MSG7 msg = XmlUtils.getMsg(file, MSG7.class);
        System.out.println(msg);
        SubRunnerContext.getBean(BoreService.class).insert(msg);

    }
    public void CreCane(File file) {

        MSG8 msg = XmlUtils.getMsg(file, MSG8.class);
        System.out.println(msg);
        SubRunnerContext.getBean(CaneService.class).insert(msg);

    }

    public void CreCfce(File file) {

        MSG9 msg = XmlUtils.getMsg(file, MSG9.class);
        System.out.println(msg);
        SubRunnerContext.getBean(CfceService.class).insert(msg);

    }

    public void CreCkie(File file) {

        MSG10 msg = XmlUtils.getMsg(file, MSG10.class);
        System.out.println(msg);
        SubRunnerContext.getBean(CkieService.class).insert(msg);

    }

    public void CreCkoe(File file) {

        MSG12 msg = XmlUtils.getMsg(file, MSG12.class);
        System.out.println(msg);
        SubRunnerContext.getBean(CkoeService.class).insert(msg);

    }

    private void CreCfue(File file) {
        MSG2 msg = XmlUtils.getMsg(file, MSG2.class);
        SubRunnerContext.getBean(CfueService.class).insert(msg);

    }


}
